草庐IT

c++ - SIMD C++ 库

全部标签

c - 当 dlopen one 时,它​​的符号没有被主符号覆盖,为什么?

libp2.c#includevoidpixman(){printf("pixmaninlibp1\n");}libc2.c#includevoidpixman();voidcairo(){printf("cairo2\n");pixman();}ma​​in.c#include#includevoidpixman(){printf("pixmaninmain\n");}intmain(){pixman();void*handle=NULL;void(*callfun)();handle=dlopen("/home/zpeng/test/so_test/libc2.so",RTLD_L

c - 当 dlopen one 时,它​​的符号没有被主符号覆盖,为什么?

libp2.c#includevoidpixman(){printf("pixmaninlibp1\n");}libc2.c#includevoidpixman();voidcairo(){printf("cairo2\n");pixman();}ma​​in.c#include#includevoidpixman(){printf("pixmaninmain\n");}intmain(){pixman();void*handle=NULL;void(*callfun)();handle=dlopen("/home/zpeng/test/so_test/libc2.so",RTLD_L

c - dlopen:是否可以捕获未解析的符号, "manually"在它们发生时解析它们?

是否可以在未解析的符号引用发生时捕获它们,以便调用一个函数来尝试根据需要解析符号?或者是否可以在运行时向动态符号表添加新符号而不创建库文件并打开它?我在GNU/Linux上,使用GCC。(对其他Unix的可移植性会很好,但这不是关键问题。)提前致谢!编辑:我应该更详细地说明我正在尝试做什么。我想为一种编程语言编写一个解释器,它应该支持编译的(dlopen'ed)和解释的模块。我希望从已编译模块调用在别处定义的函数由链接器解析,以避免在每次调用时查找函数,但对解释代码的调用将无法解析。我想捕获这些调用,以便我可以在需要时调用适当的解释函数(或者如果该函数不存在则发出错误信号)。

c - dlopen:是否可以捕获未解析的符号, "manually"在它们发生时解析它们?

是否可以在未解析的符号引用发生时捕获它们,以便调用一个函数来尝试根据需要解析符号?或者是否可以在运行时向动态符号表添加新符号而不创建库文件并打开它?我在GNU/Linux上,使用GCC。(对其他Unix的可移植性会很好,但这不是关键问题。)提前致谢!编辑:我应该更详细地说明我正在尝试做什么。我想为一种编程语言编写一个解释器,它应该支持编译的(dlopen'ed)和解释的模块。我希望从已编译模块调用在别处定义的函数由链接器解析,以避免在每次调用时查找函数,但对解释代码的调用将无法解析。我想捕获这些调用,以便我可以在需要时调用适当的解释函数(或者如果该函数不存在则发出错误信号)。

c - valgrind 错误 : Conditional jump or move depends on uninitialised value(s)

我有一个程序:#includeintcall(){intx=25;++x;returnx;}intmain(){intp;p=call();printf("%d",p);return0;}当我使用-g选项编译程序并使用valgrind运行它时,它显示:==15469==1errorsincontext1of8:==15469==Conditionaljumpormovedependsonuninitialisedvalue(s)==15469==at0x546F83:_dl_relocate_object(in/lib/ld-2.12.90.so)==15469==by0x53E6CC

c - valgrind 错误 : Conditional jump or move depends on uninitialised value(s)

我有一个程序:#includeintcall(){intx=25;++x;returnx;}intmain(){intp;p=call();printf("%d",p);return0;}当我使用-g选项编译程序并使用valgrind运行它时,它显示:==15469==1errorsincontext1of8:==15469==Conditionaljumpormovedependsonuninitialisedvalue(s)==15469==at0x546F83:_dl_relocate_object(in/lib/ld-2.12.90.so)==15469==by0x53E6CC

c - 使用 dlsym() 在静态链接库中查找变量

我们有一个链接多个静态库的程序,这些静态库可能会或可能不会定义一些符号,具体取决于编译选项。在OSX上,我们使用带有NULL句柄的dlsym(3)来获取符号地址。然而,在Linux上,dlsym(3)总是返回NULL。考虑一个简单的程序(下面的源代码)链接到一个包含一个函数和一个变量的静态库中,并尝试打印它们的地址。我们可以检查程序是否包含符号:$nm-Ctest|grep"test\(func\|var\)"0000000000400715TtestFunc0000000000601050BtestVar但是程序运行时,两者都找不到:$./testtestVar:(nil)testF

c - 使用 dlsym() 在静态链接库中查找变量

我们有一个链接多个静态库的程序,这些静态库可能会或可能不会定义一些符号,具体取决于编译选项。在OSX上,我们使用带有NULL句柄的dlsym(3)来获取符号地址。然而,在Linux上,dlsym(3)总是返回NULL。考虑一个简单的程序(下面的源代码)链接到一个包含一个函数和一个变量的静态库中,并尝试打印它们的地址。我们可以检查程序是否包含符号:$nm-Ctest|grep"test\(func\|var\)"0000000000400715TtestFunc0000000000601050BtestVar但是程序运行时,两者都找不到:$./testtestVar:(nil)testF

c++ - 从 C++ 调用 C API 时缺少 printf 语句的输出

让我们通过示例代码。ctest1.c#includevoidctest1(int*i){printf("Thisisfromctest1\n");//outputofthisismissing*i=15;return;}ctest2.c#includevoidctest2(int*i){printf("Thisisfromctest2\n");//outputofthisismissing*i=100;return;}ctest.hvoidctest1(int*);voidctest2(int*);现在让我们从中创建c库gcc-Wall-cctest1.cctest2.car-cvql

c++ - 从 C++ 调用 C API 时缺少 printf 语句的输出

让我们通过示例代码。ctest1.c#includevoidctest1(int*i){printf("Thisisfromctest1\n");//outputofthisismissing*i=15;return;}ctest2.c#includevoidctest2(int*i){printf("Thisisfromctest2\n");//outputofthisismissing*i=100;return;}ctest.hvoidctest1(int*);voidctest2(int*);现在让我们从中创建c库gcc-Wall-cctest1.cctest2.car-cvql